package io;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * 缓冲输出流的写缓冲问题
 */
public class FlushDemo {
    public static void main(String[] args) throws IOException {
        FileOutputStream fos = new FileOutputStream("./bos.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);

        String line = "和我在成都的街头走一走,哦哦哦哦~";
        byte[] data = line.getBytes(StandardCharsets.UTF_8);

        bos.write(data);
        /*
            flush:冲水

            flush()方法:用于将缓冲输出流缓冲区中已经缓存的数据一次性全部写出

            flush方法定义在java.io.Flushable接口上的,而该接口被OutputStream所有字节输出流
            超类所实现.这意味着所有字节输出流都具有flush方法.
            但是该方法实际效果是在缓冲字节输出流上实现的,而其它高级流的flush方法实现就是调用它
            连接的流的flush将flush方法传递下去,最终传递给缓冲输出流完成缓冲区的写出操作.
            而低级流的flush默认实现是没有人操作的,比如文件流.

         */
//        bos.flush();

        System.out.println("写出完毕");
        /*
            缓冲流的close方法中会执行一次flush方法,确保流关闭前会将缓冲区没有写出的数写出
         */
        bos.close();
    }
}
